package com.cskaoyan.javase.basic._1identifier;

/**
 * 标识符: 就是一个给Java代码中结构起名字的字符串
 *
 * 需要标识符起名字的常见结构有哪些？
 * 主要有：
 *      1.类名（包括后面会学习的接口名、注解名等）
 *      2.方法名（main就是一个方法名）
 *      3.变量名
 *      4.包名
 *
 * 标识符的命名规范
 * 1.标识符命名规范的语法要求:
 * 标识符的开头必须是：
 *      1.字母（A~Z 和 a~z）
 *      2.下划线（_）
 *      3.美元符号（$）
 *      4.Unicode 字符集中编号为0xC0以及它后面的所有符号
 *          0xC0是一个十六进制数
 *          在java代码中:
 *              1.以0b/0B开头,表示二进制数
 *              2.以"0"开头,表示一个八进制数
 *              3."以0X"开头,表示一个十六进制数
 *          实际上这里包含绝大多数国家的语言字符
 *          但是不包含英文,以及英文字符,阿拉伯数字等常用英文环境的字符.
 *
 *
 * 标识符的组成必须是：
 *      1.数字（0~9）
 *      2.字母（A~Z 和 a~z）
 *      3.美元符号（$）
 *      4.下划线（_）
 *      5.Unicode 字符集中编号为0xC0以及它后面的所有符号
 *
 * 标识符除了有语法上的规定和限制以外,更重要的是符合"约定俗成"的规范
 * 首先，需要遵循以下几个原则（非常重要）：
 *      1.标识符字符串尽量使用合法的英文单词（少数特殊情况可以用拼音）
 *      2.标识符字符串尽量只使用英文字母和阿拉伯数字。
 *            a.不要使用“$”美元符号，其在命名中有特殊含义，建议程序员不要主动使用它。
 *            b.尽量不要使用“_”下划线，其在命名中也有特殊含义，除开特殊场景不要使用它。
 *      3."$"或者“_”即便出现，也严禁作为开头结尾！
 *
 * "驼峰命名法"的命名规则: 当多个英文单词组成一个标识符字符串时,用驼峰命名法可以区分每个单词的界限:
 *      1.大驼峰式的命名,首个单词的首字母大写,其余单词的首字母也是大写.
 *          比如一个"最大值"的标识符字符串,用大驼峰写是: MaxValue
 *          再比如: Java47thStudent,MinValue
 *          如果标识符只有一个单词,那就直接首字母大写,比如Student,Name
 *
 *      2.小驼峰式的命名,首个单词的首字母小写,其余单词的首字母也是大写.
 *          比如一个"最大值"的标识符字符串,用小驼峰写是: maxValue
 *          再比如: java47thStudent,minValue
 *          如果标识符只有一个单词,那就直接首字母大写,比如student,name
 *
 * 接下来针对几个比较常见的需要标识符的场景,具体分析一下标识符的命名规范:
 *       1.类名（包括后面会学习的接口名、注解名等）
 *          应该使用大驼峰的,命名规范
 *          应当尽量使用正确的英文单词(特殊场景可以用拼音),不能使用汉字等其它语言字符
 *          比如一个学生类,就应该叫Student,不能叫XueSheng等.
 *
 *       2.方法名（main就是一个方法名）
 *          应该使用小驼峰的命名规范
 *          比如一个求最大值的方法,应该命名为"getMaxValue calcMaxValue"
 *
 *       3.变量名
 *          应该使用小驼峰的命名规范
 *          比如一个表示姓名的变量,应该叫name,表示年龄的,应该叫age
 *
 *       4.包名
 *          包名的书写应该尽量使用正确的英文单词,字母应当全部小写,不存在大写.
 *          绝大多数公司的工程的包名,都会以反转公司域名作为开头
 *          比如王道,你可以写包名"com.cskaoyan.xxx"开头
 *          包名如果使用名词英文单词，那么统统使用单数形式，不要用复数形式。
 *          比如一个包用来装工具,装工具类,可以命名为"tool"或者"util"不要使用它们加"s"的复数版本.
 *          约定: 为了方便大家上课看代码,方便大家理清上课的顺序,我们给包名加一个数字序号,以示区分
 *          包名会命名为"_0xxx"
 *          注意这种命名是错误的命名,请大家实际开发不要模仿.
 *
 * 标识符在命名时,其核心的追求是"见名知意"。
 *
 * @since 16:20
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int a = 100;
        int b = 0x64;
        int c = 0144;
        int d = 0b01100100;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

        // 标识符
        // Non-ASCII characters in an com.cskaoyan.javase.basic._1identifier
        int 长风 = 100;
        System.out.println(长风);
        int Class;
        // #不行
        // int DataClass#;
        // "." ","不行
        // int _98.3;
        // 像"回车,空格,制表符"等看起来什么都没有的,它们也是一个字符,称之为控制字符,它们都属于常用的英文字符
        // int Hello  World;

        int 好きだ;

        int getStuedntAge;

        int abc_de;

        // l和1一起用。字母 l 和数字 1 有时候是看不出来的。如果L确实需要和1连用,那就用大写"L"
        // int l1 = 11;
        int len1;
        int len2;

    }
}
